package BackEnd;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;

import Entities.CAuftrag;
import Entities.CIntratagesDaten;
import Entities.CRendite;
import Entities.CSymbol;
import Entities.CTagesDaten;
import Entities.CStatTransportObject;

public class ServerFacade extends UnicastRemoteObject implements ServerInterface {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	protected ServerFacade() throws RemoteException {
		super();
		AuftragsManager aufM = AuftragsManager.getInstance();
		AuftragPlanungManager aufPMan = new AuftragPlanungManager(aufM);
		aufPMan.start();
	}

	@Override
	public void deleteAuftragAusDB(CAuftrag c) throws RemoteException {
		SQLManager.getInstance().deleteAuftragAusDB(c);
		
	}

	@Override
	public int getAnzahlDatensaetze(int auftragID) throws RemoteException {
		return SQLManager.getInstance().getAnzahlDatensaetze(auftragID);
	}

	@Override
	public double getMaximumKurs(int auftragID) throws RemoteException {
		return SQLManager.getInstance().getMaximumKurs(auftragID);
	}

	@Override
	public double getMinimumKurs(int auftragID) throws RemoteException {
		return SQLManager.getInstance().getMinimumKurs(auftragID);
	}
	
	@Override
	public CStatTransportObject getValuesForInfoPanel(int auftragID){
		SQLManager sqlMan = SQLManager.getInstance();
		return new CStatTransportObject(sqlMan.getMinimumKurs(auftragID), sqlMan.getMaximumKurs(auftragID), sqlMan.getAnzahlDatensaetze(auftragID));
	}
	
	
	@Override
	public boolean isSymbolInDB(String s) throws RemoteException {
		return SQLManager.getInstance().isSymbolInDB(s);
	}

	@Override
	public void saveSymbolInDB(CSymbol s) throws RemoteException {
		SQLManager.getInstance().saveSymbolInDB(s);
	}

	@Override
	public synchronized ArrayList<CIntratagesDaten> getIntratagesDatenFromDB(int auftragID)
			throws RemoteException {
		return SQLManager.getInstance().getIntratagesDatenFromDB(auftragID);
	}

	@Override
	public ArrayList<CAuftrag> getAlleAuftraegeFromDB() throws RemoteException {
		return SQLManager.getInstance().getAlleAuftraegeFromDB();
	}

	@Override
	public void refreshAuftragDb(CAuftrag auftrag) throws RemoteException {
		SQLManager.getInstance().refreshAuftragDb(auftrag);
	}

	@Override
	public void saveAuftragInDB(CAuftrag auftrag) throws RemoteException {
		SQLManager.getInstance().saveAuftragInDb(auftrag);
	}
	
	@Override
	public int getNextID(String tablename){
		return SQLConnector.getInstance().getNextID(tablename);
	}

	@Override
	public void starteAuftrag(CAuftrag auftrag) throws RemoteException {
		AuftragsManager.getInstance().startAuftrag(auftrag);
	}

	@Override
	public void stoppeAuftrag(CAuftrag auftrag) throws RemoteException {
		AuftragsManager.getInstance().stopAuftrag(auftrag);
	}

	@Override
	public void stoppeAuftragManually(CAuftrag auftrag) throws RemoteException {
		AuftragsManager.getInstance().stopAuftragManually(auftrag);
	}
	
	@Override
	public void planeAuftrag(CAuftrag auftrag) throws RemoteException {
		AuftragsManager.getInstance().planeAuftrag(auftrag);
	}
	
	@Override
	public void interruptAuftrag(CAuftrag auftrag){
		AuftragsManager.getInstance().interruptAuftrag(auftrag);
	}

	@Override
	public void setDefaultOptions() throws RemoteException {
		OptionManager.getInstance().setDefaultOptions();
	}

	@Override
	public Date parseDate(Timestamp time) throws RemoteException {
		return OptionManager.getInstance().parseDate(time);
	}

	@Override
	public void saveOptionsInFile() throws RemoteException {
		OptionManager.getInstance().saveOptionsInFile();
	}

	@Override
	public void loadOptionsFromFile() throws RemoteException {
		OptionManager.getInstance().loadOptionsFromFile();
	}

	@Override
	public String getEndBoerseTime() throws RemoteException {
		return OptionManager.getInstance().getEndBoerseTime();
	}

	@Override
	public void setEndBoerseTime(String endBoerseTime) throws RemoteException {
		OptionManager.getInstance().setEndBoerseTime(endBoerseTime);
	}

	@Override
	public String getStartBoerseTime() throws RemoteException {
		return OptionManager.getInstance().getStartBoerseTime();
	}

	@Override
	public void setStartBoerseTime(String startBoerseTime)
			throws RemoteException {
		OptionManager.getInstance().setStartBoerseTime(startBoerseTime);
	}

	@Override
	public Date getStartDate() throws RemoteException {
		return OptionManager.getInstance().getStartDate();
	}

	@Override
	public void setStartDate(Date startDate) throws RemoteException {
		OptionManager.getInstance().setStartDate(startDate);
	}

	@Override
	public Date getEndDate() throws RemoteException {
		return OptionManager.getInstance().getEndDate();
	}

	@Override
	public void setEndDate(Date endDate) throws RemoteException {
		OptionManager.getInstance().setEndDate(endDate);
	}

	@Override
	public String getLaf() throws RemoteException {
		return OptionManager.getInstance().getLaf();
	}

	@Override
	public void setLaf(String laf) throws RemoteException {
		OptionManager.getInstance().setLaf(laf);
	}

	@Override
	public ArrayList<CTagesDaten> getTagesDatenFromDB(int auftragID)
			throws RemoteException {
		return SQLManager.getInstance().getTagesDatenFromDB(auftragID);
	}
	@Override
	public YahooFinanceQuoteGetter getQuote(int key){
		return AuftragsManager.getInstance().getQuote(key);
	}

	@Override
	public String getServer() throws RemoteException {
		return OptionManager.getInstance().getServer();
	}

	@Override
	public void setServer(String serverSettings) {
		OptionManager.getInstance().setServer(serverSettings);
	}

//	@Override
//	public void register(ClientInterface c) throws RemoteException {
//		ServerCallback.getInstance().register(c);
//	}

	@Override
	public ArrayList<CRendite> getRenditenVonDB(int auftragID) throws RemoteException {
		return SQLManager.getInstance().getRenditenFromDB(auftragID);
	}
}
